package com.lishe.lishe.lishe.bean;

import android.graphics.Rect;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;

/**
 * Created by DELL on 2017/10/30.
 */

public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
    int mLeftSpace;
    int mRightSpace;
    int mTopSpace;
    int mBottomSpace;

    /**
     * Retrieve any offsets for the given item. Each field of <code>outRect</code> specifies
     * the number of pixels that the item view should be inset by, similar to padding or margin.
     * The default implementation sets the bounds of outRect to 0 and returns.
     * <p>
     * <p>
     * If this ItemDecoration does not affect the positioning of item views, it should set
     * all four fields of <code>outRect</code> (left, top, right, bottom) to zero
     * before returning.
     * <p>
     * <p>
     * If you need to access Adapter for additional data, you can call
     * {@link RecyclerView#getChildAdapterPosition(View)} to get the adapter position of the
     * View.
     *
     * @param outRect Rect to receive the output.
     * @param view    The child view to decorate
     * @param parent  RecyclerView this ItemDecoration is decorating
     * @param state   The current state of RecyclerView.
     */
    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        outRect.left = mLeftSpace;
        outRect.bottom = mBottomSpace;
        int spanCount=getSpanCount(parent);
        if(parent.getChildLayoutPosition(view)<spanCount) {
            outRect.top = mTopSpace;
        }
        outRect.right = mRightSpace;

    }

    /**
     *
     * @param leftSpace px
     * @param rightSpace px
     * @param topSpace px
     * @param bottomSpace px
     */
    public SpaceItemDecoration(int leftSpace,
                               int rightSpace,
                               int topSpace,
                               int bottomSpace) {
        this.mLeftSpace = leftSpace;
        this.mRightSpace = rightSpace;
        this.mTopSpace = topSpace;
        this.mBottomSpace = bottomSpace;
    }

    /**
     * 获取列数
     *
     * @param parent
     * @return
     */
    private int getSpanCount(RecyclerView parent) {
        // 列数
        int spanCount = -1;
        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
        if (layoutManager instanceof GridLayoutManager) {

            spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
        } else if (layoutManager instanceof StaggeredGridLayoutManager) {
            spanCount = ((StaggeredGridLayoutManager) layoutManager)
                    .getSpanCount();
        }
        return spanCount;
    }
}
